
class TcePagamentoController {

    String controlador;
    String acao;
    TceService tceService;


    /*
     * Carrega a tela de busca do Tce e após a busca exibe os dados encontrados.
     */
    def index  = {
        if(!verificaLogon()){
            return;
        }
        
        int totalPagamento = 0;

        if(params.id != null){

            def tceInstance = Tce.findById(params.id)

            // PAGAMENTO.
            // Carrega os dados para a alteração.
            def tcePagamentoDadosInstance = '';
            if(params.pagamento != null){
                tcePagamentoDadosInstance = TcePagamento.findById(params.pagamento);
            }else{
                tcePagamentoDadosInstance = new TcePagamento();
            }
            // Carrega os endereços cadastrados.
            def tcePagamentoInstance   = TcePagamento.findAllByTce(tceInstance);
            if (tcePagamentoInstance != null){
                totalPagamento = tcePagamentoInstance.count();
            }else{
                tcePagamentoInstance   = new TcePagamento();
            }
            // FORMA PAGAMENTO
            def formaPagamentoInstance = FormaPagamento.findAll();


            [tceInstance               : tceInstance,
             tcePagamentoInstance      : tcePagamentoDadosInstance,
             tcePagamentoInstanceList  : tcePagamentoInstance,
             tcePagamentoInstanceTotal : totalPagamento,
             formaPagamentoInstance    : formaPagamentoInstance,
             abre:'S'];
        }else{
            [tceInstance : new Tce(), abre:'N'];
        }
    }

    /*
     * Lista os pagamentos recebidos pelo estagiário.
     */
    def listPgtoEstagiario = {
        if(!verificaLogon()){
            return;
        }
        Estagiario estagiario = Estagiario.findById(session.pessoa.id);
        def tcePagamento = TcePagamento.executeQuery("SELECT tp FROM TcePagamento tp, Tce tc, Solicitacao so, Estagiario es WHERE tp.tce.id = tc.id AND tc.solicitacao.id = so.id AND so.estagiario.id = es.id AND es.id = ?",[estagiario.id]);

        //render(view:"list", model:[tcePagamentoInstanceList: TcePagamento.list(params), tcePagamentoInstanceTotal: TcePagamento.count()]);
        render(view:"list", model:[tcePagamentoInstanceList: tcePagamento, tcePagamentoInstanceTotal: tcePagamento.count(),tipo:'ES']);
    }

    /*
     * Lista os pagamentos realizados pela Unidade Concedente.
     */
    def listPgtoUC = {
        if(!verificaLogon()){
            return;
        }
        UnidadeConcedente unidadeConcedente = UnidadeConcedente.findById(session.pessoa.id);
        def tcePagamento = TcePagamento.executeQuery("SELECT DISTINCT tp FROM TcePagamento tp, Tce tc, Solicitacao so, UnidadeConcedente uc, Vaga va WHERE tp.tce.id = tc.id AND tc.solicitacao.id = so.id AND so.vaga.id = va.id AND va.unidadeConcedente.id = ?",[unidadeConcedente.id]);

        //render(view:"list", model:[tcePagamentoInstanceList: TcePagamento.list(params), tcePagamentoInstanceTotal: TcePagamento.count()]);
        render(view:"list", model:[tcePagamentoInstanceList: tcePagamento, tcePagamentoInstanceTotal: tcePagamento.count(), tipo:'UC']);
    }

    /*
     * Realiza a busca do Tce pelo id e chama o index para exibir os dados.
     */
    def buscarTce = {
        if(!verificaLogon()){
            return;
        }
        if(params.numtce){
            Tce tce = Tce.findById(params.numtce)
            if(tce){
                redirect(action:'index', id:tce.id);
            }else{
                flash.message = "Não foi possível encontrar o TCE.";
                redirect(action:"index");
            }
        }else{
            flash.message = "Você deve informar um número do TCE.";
            redirect(action:"index");
        }
    }


    /*
     * Closure que grava o registro.
     */
    def save   = {
        if(!verificaLogon()){
            return;
        }
        controlador = params.controlador;
        acao        = params.acao;
        def tce = Tce.findById(params.tce.id);

        if(tceService.verificaSituacaoTce(tce) == 'ativo'){
            // Carrega os atributos e recebe os dados.
            def tcePagamentoInstance = new TcePagamento(params);
            // Grava os dados e redireciona para a tela de origem.
            if (tcePagamentoInstance.save(flush: true)) {
                flash.message = "Pagamento registrado com sucesso.";
                redirect(controller:controlador, action:acao, id:params.tce.id,);
            }else {
                flash.message = "Não foi possível cadastrar o pagamento.";
                redirect(controller:controlador, action:acao, id:params.tce.id, model: [tcePagamentoInstance: tcePagamentoInstance]);
            }
        }else{
            flash.message = "Não é possível registrar um pagamento para um TCE que não está ativo.";
            redirect(controller:controlador, action:acao, id:params.tce.id);
        }
    };

    /*
     * Closure que grava as alterações no registro.
     */
    def update   = {
        if(!verificaLogon()){
            return;
        }
        controlador = params.controlador;
        acao        = params.acao;
        
        def tcePagamentoInstance = TcePagamento.get(params.id);
        tcePagamentoInstance.properties = params;
        // Grava os dados e redireciona para a tela de origem.
        if (tcePagamentoInstance.save(flush: true)) {
            flash.message = "Pagamento alterado com sucesso.";
            redirect(controller:controlador, action:acao, id:params.tce.id);
        }else {
            flash.message = "Não foi possível alterar o pagamento.";
            redirect(controller:controlador, action:acao, id:params.tce.id, model:[tcePagamentoInstance: tcePagamentoInstance]);
        }
    };

    /*
     * Closure que carrega os dados para alteração do registro.
     */
    def edit   = {
        if(!verificaLogon()){
            return;
        }
        controlador = params.controlador;
        acao        = params.acao;
        def tcePagamentoInstance = TcePagamento.findById(params.id);
        // Se o contato existe retorna os dados para tela de origem.
        if (tcePagamentoInstance){
            redirect(controller:controlador, action:acao, id:params.tce, params:[pagamento: tcePagamentoInstance]);
        }else{
            flash.message = "Pagamento não encontrado.";
            redirect(controller:controlador, action:acao, id:params.tce);
        }
    };

    /*
     * Closure que exclui os registro.
     */
    def delete = {
        if(!verificaLogon()){
            return;
        }
        controlador = params.controlador;
        acao        = params.acao;
        // Carrega os dados.
        def tcePagamentoInstance = TcePagamento.findById(params.id)
        // Exclui o registro.
        if(tcePagamentoInstance.delete()){
            flash.message = "Pagamento excluido com sucesso.";
            redirect(controller:controlador, action:acao, id:params.tce);
        }else{
            flash.message = "Não foi possível excluir o pagamento.";
            redirect(controller:controlador, action:acao, id:params.tce);
        }
    };

    /*
     * Método que verifica se o usuário está logado.
     * Se não estiver logado é redirecionado para home
     */
    private boolean verificaLogon() {
        if(!session["pessoa"]){
            flash.message = "Você precisa estar logado para acessar esta página.";
            redirect(controller:'login', action:'auth');
            return false;
        }

        return true;
    }
}
